﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using CoreInmobiliario.Data;

namespace CoreInmobiliario.Business
{
    [DataObject]
    public class Publicacion
    {
        public static Publicacion GetInstance()
        {
            return new Publicacion();
        }

        private static DBDataContext GetDBDataContext()
        {
            Factories.DBDataContextFactory factory = new Factories.DBDataContextFactory();
            return factory.CreateDataContext() as DBDataContext;
        }

        public Data.Publicacion GetById(int publicacionId)
        {
            Data.Publicacion publicacion = null;

            try
            {
                publicacion = GetDBDataContext().Publicacions.FirstOrDefault(p => p.PublicacionId.Equals(publicacionId));
            }
            catch (Exception ex)
            {

            }
            
            return publicacion;
        }

        public List<Data.spPublicaciones_selResult> GetPublicaciones(int? tipoPropiedadId, int? operacionId, int? localidadId, int? monedaId, int? precioDesde, int? precioHasta)
        {
            List<Data.spPublicaciones_selResult> list = null;

            using (DBDataContext dataContext = GetDBDataContext())
            {
                try
                {
                    list = dataContext.spPublicaciones_sel(tipoPropiedadId, operacionId, localidadId, monedaId, precioDesde, precioHasta).ToList();
                }
                catch (Exception ex)
                {

                }
            }
            return list;
        }

        public List<Data.spPropuestas_selResult> GetPropuestas()
        {
            List<Data.spPropuestas_selResult> list = null;

            using (DBDataContext dataContext = GetDBDataContext())
            {
                try
                {
                    list = dataContext.spPropuestas_sel().ToList();
                }
                catch (Exception ex)
                {

                }
            }
            return list;
        }

        public List<Data.Publicacion> GetDestacados(Boolean destacada)
        {
            List<Data.Publicacion> list = null;

            try
            {
                list = GetDBDataContext().Publicacions.Where(p => p.Destacada.Equals(destacada)).ToList();
            }
            catch (Exception ex)
            {

            }

            return list;
        }

        public Data.Publicacion GetByPropiedadId(int propiedadId)
        {
            Data.Publicacion publicacion = null;

            try
            {
                publicacion = GetDBDataContext().Publicacions.FirstOrDefault(p => p.PropiedadId.Equals(propiedadId));
            }
            catch (Exception ex)
            {

            }

            return publicacion;
        }

        public Boolean InsertPublicacion(Data.Publicacion publicacion)
        {
            using (DBDataContext dc = GetDBDataContext())
            {
                try
                {
                    dc.Publicacions.InsertOnSubmit(publicacion);
                    dc.SubmitChanges();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }

        public Boolean DeletePublicacionByPropiedadId(int propiedadId)
        {
            using (DBDataContext dc = GetDBDataContext())
            {
                try
                {
                    Data.Publicacion publicacion = dc.Publicacions.FirstOrDefault(p => p.PropiedadId.Equals(propiedadId));
                    dc.Publicacions.DeleteOnSubmit(publicacion);
                    dc.SubmitChanges();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }

        public Boolean UpdatePublicacion(Data.Publicacion p)
        {
            using (DBDataContext dc = GetDBDataContext())
            {
                try
                {
                    Data.Publicacion publi = dc.Publicacions.FirstOrDefault(pr => pr.PublicacionId.Equals(p.PublicacionId));
                    publi.Destacada = p.Destacada;
                    publi.Expensas = p.Expensas;
                    publi.Fecha = p.Fecha;
                    publi.MonedaAlquilerId = p.MonedaAlquilerId;
                    publi.MonedaVentaId = p.MonedaVentaId;
                    publi.OperacionId = p.OperacionId;
                    publi.PrecioAlquiler = p.PrecioAlquiler;
                    publi.PrecioVenta = p.PrecioVenta;
                    publi.Requisitos = p.Requisitos;
                    publi.UsuarioId = p.UsuarioId;

                    dc.SubmitChanges();
                    return true;
                }
                catch
                {
                    return false;
                }
            }
        }

        public int GetLastPublicacion()
        {
            List<Data.spLastPublicacion_selResult> list = null;
            int? publicacionId = null;

            using (DBDataContext dataContext = GetDBDataContext())
            {
                try
                {
                    list = dataContext.spLastPublicacion_sel().ToList();
                    publicacionId = list[0].Column1;
                }
                catch (Exception ex)
                {

                }
            }

            return publicacionId.Value;
        }
    }
}
